import '../methodchannelmanager.dart';

/**
 * @Description: 科大讯飞 语音识别 工具类
 * @Author: 下雨了
 * @CreateDate: 2022-02-23 10:47
 * @UpdateUser: 更新者
 * @UpdateDate:  2022-02-23 10:47
 * @UpdateRemark: 更新说明
 * @Version: 1.0
 */

typedef ResultCallback = void Function(String result);

class XFApiUtils {
  XFApiUtils._internal();

  static final XFApiUtils _xfApiUtils = XFApiUtils._internal();

  factory XFApiUtils() => _xfApiUtils;

  // 开始录音
  Future<void> start(ResultCallback result) async {
    // 先设置 返回值  监听
    MethodChannelManager().setMethodChannelCallback((str) {
      result.call(str);
    });
    // 调用原生 启动录音
    await MethodChannelManager.platform.invokeMethod('xfVoiceStart');
  }

  // 结束录音
  Future<void> stop() async {
    await MethodChannelManager.platform.invokeMethod('xfVoiceStop');
  }

  //  取消录音
  Future<void> cancel() async {
    await MethodChannelManager.platform.invokeMethod('xfVoiceCancel');
  }

  // 获取录音
  Future<void> getResult(ResultCallback result) async {
    await MethodChannelManager.platform
        .invokeMethod('xfVoiceGetResult')
        .then((value) {
      result.call(value);
    });
  }

  // 标点符号 （默认有）,设置为"0"返回结果无标点,设置为"1"返回结果有标点
  Future<void> setPunctuation() async {
    await MethodChannelManager.platform.invokeMethod('xfVoiceSetPunctuation');
  }

  // 设置语音前端点:静音超时时间(0-10000)，即用户多长时间不说话则当做超时处理
  Future<void> setVoiceBOS() async {
    await MethodChannelManager.platform.invokeMethod('xfVoiceSetVoiceBOS');
  }

  // 设置语音后端点:后端点静音检测时间(0-10000)，即用户停止说话多长时间内即认为不再输入， 自动停止录音
  Future<void> setVoiceEOS() async {
    await MethodChannelManager.platform
        .invokeMethod('xfVoiceSetVoiceEOS', {'eos': 10000});
  }
}
